
## cli 开发流程  
- `npm init` 创建项目，这里演示的项目名是wdh-cli
- 创建脚手架入口文件（index.js），头部必须加入以下代码：`#!/usr/bin/env node`
- 配置package.json文件，添加命令 执行时的入口文件
```JSON
"bin":"{"wdh-cli":./index'}"
```
- 后面就是在index.js中编写脚手架代码啦啦啦啦!
- 将脚手架发布到npm  
    打开npm的官网,注册一个账号（已注册请忽略）；  
    npm login 输入账号、密码和邮箱进行登录（这时数据源如果非官方链接会报错，请提前切换成npm官方数据源）；  
    npm publish 将项目发布到npm服务器。

:::info
`#!/usr/bin/env node`的含义  

#! 在Linux或者Unix中叫做：shebang。  意思就是：标识作用，说明这个文件可以当做脚本来使用。  

/usr/bin/env node  意思就是用node来执行此文件。  

/usr/(node安装根目录)  

/bin/env node根目录中bin文件夹的env环境变量中去找。
:::

## cli 使用

- 全局安装脚手架：npm install -g wdh-cli  
- 终端使用脚手架：wdh-cli


## 查看脚手架 安装位置

这里演示环境：mac os  
终端输入 `which node` 来查看node 命令所在目录。  
我这里输出的是 ` /usr/local/bin/node `  
可以看到同级目录下有个 wdh-cli 的软链，右击显示原项目即可看到wdh-cli源文件  


## 解决本地测试问题
我们如果对wdh-cli进行了更改想测试的话，每次还需要重新发布到npm服务器上，有点麻烦。  
我们可以使用 `npm link`命令 给本地项目创建一个快捷方式到node全局包的位置，这时再执行`wdh-cli`命令使用的就是本地项目的代码了。

- 首先把之前的`wdh-cli`进行卸载 `npm uni wdh-cli -g`。去全局包里检查一下是否还有。
- 进入本地 wdh-cli项目根目录，执行`npm link` node 会将所在目录生成一个快捷方式放入全局命令文件夹内。
- 再执行`wdh-cli`，这时可正常执行。OK，直接修改代码测试吧。

:::tip
取消软链命令：`npm unlink`
:::

:::warning
其实代码没压缩的情况下，可在全局包里直接改源码，也可达到测试的目的，不推荐。  
因为这样测试成功后，还需要拷贝相关代码到本地项目中，这时还要再测一遍。
:::

## 原理

当我们执行全局安装脚手架时，会在全局的bin目录下加入一个软连接指向node_modules下的包目录
npm install -g wdh-cli


## 坑
lerna bootstrap  

